/**
 * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
 * No deletion without permission, or be held responsible to law.
 */
package com.jeesite.modules.vehicle.service;

import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.service.CrudService;
import com.jeesite.common.text.PinyinUtils;
import com.jeesite.common.utils.SpringUtils;
import com.jeesite.modules.general.utils.CosApiUtils;
import com.jeesite.modules.vehicle.dao.BrandApiDao;
import com.jeesite.modules.vehicle.entity.BrandApi;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 测试数据Service
 *
 * @author ThinkGem
 * @version 2018-04-22
 */
@Service
public class BrandApiService extends CrudService<BrandApiDao, BrandApi> {

    /**
     * 查询车品牌列表
     */
    public Map<String, Object> findBrandList(BrandApi brandApi) {
        List<BrandApi> list = dao.findList(brandApi);

        // 1. 按品牌名称首字母分组（过滤空名称、拼音获取失败的记录）
        Map<Character, List<BrandApi>> groupByFirstLetter = new HashMap<>();
        for (BrandApi brand : list) {
            String name = brand.getTitle();
            if (name == null || name.trim().isEmpty()) {
                continue; // 优化：trim() 排除纯空格的名称
            }
            String spell = PinyinUtils.getFirstSpell(name);
            if (spell == null || spell.trim().isEmpty()) {
                continue;
            }
            char firstLetter = Character.toUpperCase(spell.charAt(0));
            // 可选：只保留字母分组（过滤数字、符号等，根据需求决定是否开启）
            if (!Character.isLetter(firstLetter)) {
                continue;
            }
            groupByFirstLetter.computeIfAbsent(firstLetter, k -> new ArrayList<>()).add(brand);
        }

        // 2. 组装目标格式（BrandApi 转 Map）
        List<Map<String, Object>> result = new ArrayList<>();
        for (Map.Entry<Character, List<BrandApi>> entry : groupByFirstLetter.entrySet()) {
            Map<String, Object> item = new HashMap<>();
            item.put("index", String.valueOf(entry.getKey())); // 首字母（大写）

            // 子列表：BrandApi 转 Map（按需调整字段）
            List<Map<String, Object>> children = entry.getValue().stream()
                    .map(brand -> {
                        Map<String, Object> brandMap = new HashMap<>();
                        brandMap.put("brandId", brand.getId());
                        brandMap.put("title", brand.getTitle());
                        brandMap.put("logo", brand.getLogo());
                        // 可添加其他需要的字段：比如 brandMap.put("desc", brand.getDescription());
                        return brandMap;
                    })
                    .collect(Collectors.toList());

            item.put("children", children);
            result.add(item);
        }

        // 3. 按首字母升序排序（核心：A-Z 顺序）
        result.sort((item1, item2) -> {
            String letter1 = (String) item1.get("index");
            String letter2 = (String) item2.get("index");
            // 按字母 ASCII 码排序，确保 A-Z 顺序（忽略大小写，此处已统一大写，直接比较即可）
            return letter1.compareTo(letter2);
        });

        // 4. 处理 listB（首字母列表）：同步按 A-Z 排序
        List<Character> sortedLetters = groupByFirstLetter.keySet().stream()
                .sorted() // 字符自然排序（A-Z）
                .collect(Collectors.toList());

        // 组装返回结果
        Map<String, Object> returnMap = new HashMap<>();
        returnMap.put("listA", result); // 分组后的品牌列表（已排序）
        returnMap.put("listB", sortedLetters); // 排序后的首字母列表（A-Z）
        return returnMap;
    }

	/**
	 * 首页查询车品牌
	 */
	public List<BrandApi> findBrandLimit(BrandApi brandApi) {
        List<BrandApi> list = dao.findList(brandApi);
        for (BrandApi brand : list) {
            if (StringUtils.isNotEmpty(brand.getLogo())) {
                brand.setLogo(CosApiUtils.URL +brand.getLogo());
            }
        }
        return list;
	}
}